/*
 * Copyright (c) 2023 Cshoo Org. All Rights Reserved.
 */

package org.cshoo.tattoo.authorize.app;

import lombok.extern.slf4j.Slf4j;
import org.cshoo.tattoo.authorize.domain.po.User;
import org.cshoo.tattoo.authorize.domain.service.UserService;
import org.cshoo.tattoo.embed.infra.exception.ValidateException;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 杨翼
 * @since 1.0
 */
@Service
@Slf4j
public class UserAppService {

    @Resource
    private UserService userService;

    /**
     * 添加用户，给默认密码为cshoo1234
     *
     * @param user 用户
     */
    public void addUser(User user) {
        userService.addUser(user);
    }

    /**
     * 修改用户,这里不修改用户密码
     * 也不修改关联表信息，例如用户角色，用户群组等，防止清空
     *
     * @param user 用户
     */
    public void updateUser(User user) {
        userService.updateUser(user);
    }

    /**
     * 用户重值密码
     *
     * @param userId 用户id
     */
    public void resetPassword(Long userId) {
        userService.resetPassword(userId);
    }

    /**
     * 修改密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @throws ValidateException 校验失败
     */
    public void modifyPassword(String oldPassword, String newPassword) throws  ValidateException {
        userService.modifyPassword(oldPassword, newPassword);
    }

    /**
     * 查询所有用户，分批
     *
     * @param pageNum  页码
     * @param pageSize 每页条数
     * @return 用户分页查询的信息
     */
    public Page<User> findAllUser(int pageNum, int pageSize) {
        return userService.findAllUser(pageNum, pageSize);
    }

    /**
     * 根据群组id查询用户
     *
     * @param groupId 群组id
     * @return 用户列表
     */
    public List<User> findUsersByGroupId(Long groupId) {
        return userService.findUsersByGroupId(groupId);
    }

    /**
     * 根据用户名或者用户姓名模糊查询用户
     *
     * @return 用户列表
     */
    public List<User> findUserByName(String name) {
        return userService.findUserByName(name);
    }

    /**
     * 删除用户
     *
     * @param ids id
     */
    public void deleteUsers(List<Long> ids) {
        userService.deleteUsers(ids);
    }
}
